import { ResultData } from '@/common/dto/result';
import { HttpException, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { getManager, Repository, getConnection } from 'typeorm';
import { OssEntity, UserRoleType } from './oss.entity';

@Injectable()
export class OssService {
  // 构造
  constructor(
    @InjectRepository(OssEntity)
    private readonly ossRepository: Repository<OssEntity>
  ) {}

  async testApi(params) {
    console.log(params);
    // 增删改查
    // 找到一条
    // const res = await this.ossRepository.findOne(1);
    // 找到多条
    // const res = await this.ossRepository.find();
    // 新增
    // const res = await this.ossRepository.save({
    //   firstName: 'test',
    //   role: UserRoleType.admin,
    // });
    // 更新
    // const res = await this.ossRepository.update(1, {
    //   firstName: 'zhang',
    //   role: UserRoleType.ghost,
    // });
    // 删除
    // const res = await this.ossRepository.delete(3);
    // 模糊搜索
    // 增加 insert into 表名 (字段1,字段2) values (值1,值2)
    // const res = await getConnection()
    //   .createQueryBuilder()
    //   .insert()
    //   .into(OssEntity)
    //   .values([
    //     { firstName: '小白', role: UserRoleType.ghost },
    //     { firstName: '小黑', role: UserRoleType.editor },
    //   ])
    //   // 执行
    //   .execute(); // 链式操作
    // console.log(res);
    // return ResultData.ok(res);
    // 删
    // const res = await getConnection()
    //   .createQueryBuilder()
    //   .delete()
    //   .from(OssEntity)
    //   .where('id = :id', { id: 4 })
    //   .execute(); // :id 动态
    // return ResultData.ok(res);
    // 改
    // const res = await getConnection()
    //   .createQueryBuilder()
    //   .update(OssEntity)
    //   .set({ firstName: '张三丰', role: UserRoleType.editor })
    //   .where('id = :id', { id: 11 })
    //   .execute(); // :id 动态
    // return ResultData.ok(res);
    // 查一条
    // const res = await getConnection()
    //   .createQueryBuilder()
    //   .select()
    //   .from(OssEntity, 'oss')
    //   .where('id = :id', { id: 11 })
    //   .execute(); // :id 动态

    // 查多条
    const { limit, page } = params;
    // 隐式转换
    const skip = limit * (page - 1);
    const query = getConnection()
      .createQueryBuilder()
      // 别名
      .select('oss') //  别名 : 多表联查
      .from(OssEntity, 'oss') // 别名
      .orderBy('oss.id', 'ASC'); // ASC : 正序 DESC : 倒序

    // 容错处理
    if (limit && page) {
      query
        .take(limit) // 取前2条
        .skip(skip); // 偏移量 ?limit=每页显示几条&page=第几页
    }

    const res = await query.getMany(); // :id 动态
    return ResultData.ok(res);
    // return ResultData.error();
  }
  // entityManager = null;

  // this.entityManager = getManager();

  // 方法
  async upload() {
    // 方法 操作数据库
    // entityManager : 实体管理器
    const entityManager = getManager();
    // entityManager 查找一条
    const oss = await entityManager.findOne(OssEntity, 1);
    console.log(oss);

    return oss;
  }
}
